// 把平行树关系，转换成父子子树关系


let tree = [];

function dg(item) {
    // 添加到中状态，添加成功返回 true， 失败返回 false
    let res = false;
    function setTree(arr) {
        // parentId 是 0 的就是根元素，直接添加到底部
        if (item.parentId === 0) {
            arr.push(item);
            res = true;
            return;
        }
        // 递归遍历树，把元素添加到对应的父节点中
        for (const ele of arr) {
            if (ele.id === item.parentId) {
                ele.children.push(item);
                res = true;
                return;
            }
            setTree(ele.children)
        }
    }
    setTree(tree);
    return res;
}


let src = [
    

    {
        name: "添加配置",
        id: 3,
        parentId: 2,
        children: [],
    },
    {
        name: "修改配置",
        id: 4,
        parentId: 2,
        children: [],
    },
    {
        name: "新增修改配置",
        id: 5,
        parentId: 4,
        children: [],
    },

    {
        name: "系统管理",
        id: 2,
        parentId: 1,
        children: [],
    },
    
    {
        name: "首页",
        id: 1,
        parentId: 0,
        children: [],
    },
];

function dg2() {
    for(const item of src) {
        // 先移除遍历的元素
        src = src.filter((ele) => {
            if (ele.id !== item.id) {
                return ele;
            }
        });

        // 尝试添加到树中，添加成功返回 true，添加失败返回 false
        let res = dg(item);
        // console.log(res);

        // 把添加失败的，放在尾部，重新尝试添加树
        if (!res) {
            src.push(item);
            dg2()
            return;
        }
    };
}
dg2();

console.log(JSON.stringify(tree));
